Note: The solution set must not contain duplicate subsets.

For example,
If nums = [1,2,3], a solution is:

思路

这是一个非常巧妙的思路,因为对于子集来说,每个元素只有2种状态:在子集中,不在子集中

这刚好符合2进制,可以考虑使用bitmap的方法。

  • 0:在当前子集中

  • 1:不在当前子集中

对于n个元素,一共有2^n种取法,这和子集数也是一致的。

拿2个元素{1,2}举例:

  • 01 ——> [1] //取1

  • 10 ——> [2] //取2

  • 11 ——> [1,2] //取1,2

刚好可以取尽所有元素。

用回溯法,因为是子集,[1,2]和[2,1]一样,所以我们的每次递归的停止条件都是到nums[]中的最后一个元素。